package com.example.rydwlib.fragment


import android.graphics.Color
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.baselib.fragment.BaseFragment

import com.example.rydwlib.R
import com.example.rydwlib.RydwViewModel
import com.example.rydwlib.adapter.RyRegionAdapter
import com.example.rydwlib.bean.RyRegionCount
import com.example.rydwlib.bean.RyRegionData
import com.github.mikephil.charting.animation.Easing
import com.github.mikephil.charting.data.PieData
import com.github.mikephil.charting.data.PieDataSet
import com.github.mikephil.charting.data.PieEntry
import kotlinx.android.synthetic.main.fragment_rydw_main.*
import kotlinx.android.synthetic.main.fragment_rydw_report.*
import java.lang.Exception
import kotlin.collections.ArrayList

/**
 * A simple [Fragment] subclass.
 */
class RydwReportFragment : BaseFragment<RydwViewModel>() {
    private val regionLists= ArrayList<List<RyRegionData>>()
    private val regionAdaptr: RyRegionAdapter by lazy { RyRegionAdapter(R.layout.ry_region_item, regionLists) }

    override fun providerVMClass(): Class<RydwViewModel>? = RydwViewModel::class.java

    override fun contentLayout(): Int = R.layout.fragment_rydw_report

    override fun initView() {
        val empty = LayoutInflater.from(context).inflate(R.layout.empty_item, null, false)
        regionAdaptr.emptyView=empty
        val emptyMsg = empty.findViewById<TextView>(R.id.empty_msg)
        emptyMsg.text="暂无数据\n点击刷新试试"
        emptyMsg.setOnClickListener { viewModel.loadRyReportData() }
        initPieChart()
        ry_report_rcy.layoutManager =
            LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
        ry_report_rcy.adapter = regionAdaptr
    }

    override fun initData() {
        viewModel.getReportData().observe(this, Observer {
            regionAdaptr.notifyDataSetChanged()
            regionAdaptr.setNewData(it.reginChart)
            initChartData(it.regionCount)
            ry_report_empty.visibility=View.INVISIBLE
        })
        if (!viewModel.getUnitInfo().isNullOrEmpty()){
            ry_report_nickname.text=viewModel.getUnitInfo()["unitname"]
        }
    }

    private fun initChartData(regionData: List<RyRegionCount>) {
        val pieEntryList = ArrayList<PieEntry>()
        val colors = ArrayList<Int>()
        colors.add(Color.parseColor("#fe464d"))
        colors.add(Color.parseColor("#ffae36"))
        colors.add(Color.parseColor("#0ab3ee"))
        colors.add(Color.parseColor("#48c099"))
        var count = 0f
        for (region in regionData) {
            count += region.regioncount
        }
        //饼图实体 PieEntry
        for (dataBean in regionData) {
            val f = dataBean.regioncount.toFloat() / count
            // 参数1为 value，参数2为 data。
            // 如 PieEntry(0.15F, "90分以上");  表示90分以上的人占比15%。
            val pieEntry = PieEntry(f, dataBean.regiontype + "\n" + dataBean.regioncount)
            //            pieEntry.setX("float类型数字");
            pieEntryList.add(pieEntry)
        }

        val pieDataSet = PieDataSet(pieEntryList, "")

        pieDataSet.sliceSpace = 3f           //设置饼状Item之间的间隙
        pieDataSet.selectionShift = 10f      //设置饼状Item被选中时变化的距离
        pieDataSet.colors = colors           //为DataSet中的数据匹配上颜色集(饼图Item颜色)
        //数据连接线距图形片内部边界的距离，为百分数
//        pieDataSet.setValueLinePart1OffsetPercentage(80f);
        //设置连接线的颜色
        pieDataSet.valueLineColor = Color.BLACK
        pieDataSet.valueLinePart1Length = 0.2f
        pieDataSet.valueLinePart2Length = 0.2f
        pieDataSet.isValueLineVariableLength = false
//        // 连接线在饼状图外面
        pieDataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
//        ryPiechart.setExtraOffsets(50, 15, 50, 15);

        //最终数据 PieData
        val pieData = PieData(pieDataSet)

        pieData.setDrawValues(true)            //设置是否显示数据实体(百分比，true:以下属性才有意义)
        pieData.setValueFormatter { value, entry, dataSetIndex, viewPortHandler ->
            val pieEntry = entry as PieEntry
            pieEntry.label
        }
        pieData.setValueTextColors(colors)  //设置所有DataSet内数据实体（百分比）的文本颜色
        pieData.setValueTextSize(12f)          //设置所有DataSet内数据实体（百分比）的文本字体大小
//        pieData.setValueTypeface(mTfLight);     //设置所有DataSet内数据实体（百分比）的文本字体样式
//        pieData.setValueFormatter(new );//设置所有DataSet内数据实体（百分比）的文本字体格式
        ry_report_chart.data = pieData
        ry_report_chart.highlightValues(null)
        ry_report_chart.invalidate()

        // 获取pieCahrt图列
        ry_report_chart.legend.isEnabled = true //是否启用图列（true：下面属性才有意义）

    }

    private fun initPieChart() {
        // 设置 pieChart 图表基本属性
        ry_report_chart.setUsePercentValues(true)            //使用百分比显示
        ry_report_chart.description.isEnabled = false    //设置pieChart图表的描述
        ry_report_chart.setBackgroundColor(Color.WHITE)      //设置pieChart图表背景色
        ry_report_chart.setExtraOffsets(35f, 15f, 40f, 10f)        //设置pieChart图表上下左右的偏移，类似于外边距
        ry_report_chart.dragDecelerationFrictionCoef = 0.8f//设置pieChart图表转动阻力摩擦系数[0,1]
        ry_report_chart.rotationAngle = 0f                   //设置pieChart图表起始角度
        ry_report_chart.isRotationEnabled = true              //设置pieChart图表是否可以手动旋转
        ry_report_chart.isHighlightPerTapEnabled = true       //设置piecahrt图表点击Item高亮是否可用
        ry_report_chart.animateY(1400, Easing.EasingOption.EaseInOutQuad)// 设置pieChart图表展示动画效果

        // 设置 pieChart 图表Item文本属性
        ry_report_chart.setDrawEntryLabels(false)              //设置pieChart是否只显示饼图上百分比不显示文字（true：下面属性才有效果）
        ry_report_chart.setEntryLabelColor(Color.WHITE)       //设置pieChart图表文本字体颜色
        //        ryPiechart.setEntryLabelTypeface(mTfRegular);     //设置pieChart图表文本字体样式
        ry_report_chart.setEntryLabelTextSize(16f)            //设置pieChart图表文本字体大小

        // 设置 pieChart 内部圆环属性
        ry_report_chart.isDrawHoleEnabled = true              //是否显示PieChart内部圆环(true:下面属性才有意义)
        ry_report_chart.holeRadius = 60f                    //设置PieChart内部圆的半径(这里设置28.0f)
        ry_report_chart.transparentCircleRadius = 63f       //设置PieChart内部透明圆的半径(这里设置31.0f)
        ry_report_chart.setTransparentCircleColor(Color.WHITE)//设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色
        ry_report_chart.setTransparentCircleAlpha(50)         //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
        ry_report_chart.setHoleColor(Color.WHITE)             //设置PieChart内部圆的颜色
        ry_report_chart.setDrawCenterText(true)               //是否绘制PieChart内部中心文本（true：下面属性才有意义）
        //        ryPiechart.setCenterTextTypeface(mTfLight);       //设置PieChart内部圆文字的字体样式
        //        ryPiechart.setCenterText("Test");                 //设置PieChart内部圆文字的内容
        //        ryPiechart.setCenterTextSize(10f);                //设置PieChart内部圆文字的大小
        //        ryPiechart.setCenterTextColor(Color.RED);         //设置PieChart内部圆文字的颜色
        ry_report_chart.setNoDataText("暂无数据")
    }
    override fun requestError(it: Exception?) {
        ry_report_empty.visibility=View.VISIBLE
        if (it?.message=="暂无数据"){
            ry_report_empty.findViewById<TextView>(R.id.err_txt).text=it?.message
            ry_report_empty.findViewById<TextView>(R.id.err_msg).visibility=View.INVISIBLE
//            ry_report_empty.findViewById<ImageView>(R.id.err_img).visibility=View.INVISIBLE
        }else{
            super.requestError(it)
            ry_report_empty.findViewById<TextView>(R.id.err_msg).text=it?.message
        }
        ry_report_empty.findViewById<Button>(R.id.err_rest_btn).setOnClickListener {  viewModel.loadRyReportData() }
    }
}
